"""
关于Python是如何对"时间"进行描述！！
"""

# Python这门语言，设计理念是"一切皆对象"；

# 把时间定义成一个类！那么这样类有哪些属性？！
# 时间对属性：年月日、时分秒、时区！！
# 时间对描述：1、时刻（时间点）；2、时间段

from datetime import datetime
from datetime import timezone
from datetime import timedelta

tz_8 = timezone(
    # 设置时区的偏移量（相对于0时区，单位是小时）
    # offset=<8小时>
    offset=timedelta(hours=8)
)

# 构造一个时间点
d1 = datetime(
    year=2012,
    month=12,
    day=2,
    hour=12,
    minute=10,
    second=35,
    # 时区属性
    # tzinfo=<时区对象>
    tzinfo=tz_8
)

# 时间运算
# 时间点 + 时间段 = 时间点
# 时间点 - 时间段 = 时间点
# 时间段 + 时间段 = 时间段
# 时间段 - 时间段 = 时间段
# 时间段 * 整数 = 时间段
# 时间段 / 整数 = 时间段

# 时间转换（不同时区表示的时间点如何进行相互转换！）
# d1: 东八区时间点
# astimezone: 该函数是用来进行时区转换的函数，在使用的时候需要注意，最好
# 被转换的时间点需要具备时区属性

tz_12 = timezone(
    offset=timedelta(hours=12)
)

# d2: 东12区时间点对象
d2 = d1.astimezone(
    # 转换的目标时区
    tz=tz_12
)

# d1和d2是否是同一时刻？！
# 答：是的！d1和d2是同一时刻，只是使用不同的时区表达的！


# 额外补充一些常用第三方库！！

# pytz: 该模块。是第三方的，功能是用来处理python中的时区相关
import pytz
# 返回列表，元素是国家的时区字符串简称
# ['Asia/Shanghai', 'Asia/Urumqi']
pytz.country_timezones('cn')
# 返回一个时区对象，参数zone代表是的需要传入一个时区的字符串简称
# <DstTzInfo 'Asia/Shanghai' LMT+8:06:00 STD>
shanghai_tz = pytz.timezone(zone='Asia/Shanghai')


# django中帮助我们封装的关于时间操作的模块
# timezone：是django提供的可以用来处理时间的工具模块
from django.utils import timezone
# 当前时刻！ps：注意，获得的当前时刻是utc时区表达的！具备时区属性！
cur_0_time = timezone.now()
# 转化为东八区
cur_8_time = cur_0_time.astimezone(tz=shanghai_tz)


# 如何获取"当日"的零时！！ —— 时间点
# 2020-2-5 15：40：56 +8：00
# 转换
# 2020-2-5 00:00:00 +8：00
lingshi_8 = cur_8_time.replace(
    hour=0,
    minute=0,
    second=0
)

















